package org.shj.jvm;

/**
 * 多运行几次，本例会出现死锁的情况。
 * 
 * 原因： Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑，[-128, 127]之间的数字会被缓存。
 *      当valueOf()方法传入参数在这个范围之内，将直接返回缓存中的对象。
 * @author huangjian
 *
 */
public class DeadLockDemo implements Runnable{
	int a, b;
	
	public DeadLockDemo(int a, int b){
		this.a = a;
		this.b = b;
	}
	
	public void run(){
		synchronized(Integer.valueOf(a)){
			synchronized(Integer.valueOf(b)){
				System.out.println(a + b);
			}
		}
	}

	public static void main(String[] args) {
		for(int i = 0 ; i< 100; i++){
			new Thread(new DeadLockDemo(1,2)).start();
			new Thread(new DeadLockDemo(2,1)).start();
		}

	}

}
